package com.ww.springboot.boot.algorithm.leetcode1;

import com.ww.springboot.boot.swing.SwingUtil;

/**
 * 描述：
 *
 * @author 🧑 ‍wanwei
 * @since 2023-06-09 11:36
 */
public class DC59螺旋矩阵 {

    public static void main(String[] args) {
        generateMatrix(18);
    }


    /**
     * 顺时针旋转
     * 右 下 左 上 一直按照这个顺序去走 碰到边界就转向即可
     * 0,1,2,3 分别代表右 下 左 上
     *
     * @param n
     * @return
     */
    private static int[][] generateMatrix(int n) {
        int[][] array = new int[n][n];
        int direction = 0;
        int x = 0;
        int y = 0;
        int index = 2;
        array[0][0] = 1;

        while (index <= n * n) {
            SwingUtil.refreshData(100,(Object) array);
            switch (direction % 4) {
                case 0:
                    x++;
                    break;
                case 1:
                    y++;
                    break;
                case 2:
                    x--;
                    break;
                case 3:
                    y--;
                    break;
                default:
            }

            if (x < n && x >= 0 && y < n && y >= 0 && array[y][x] == 0) {
                array[y][x] = index;
                index++;
                continue;
            } else {
                switch (direction % 4) {
                    case 0:
                        x--;
                        break;
                    case 1:
                        y--;
                        break;
                    case 2:
                        x++;
                        break;
                    case 3:
                        y++;
                        break;
                    default:
                }
                direction++;
            }
        }
        return array;
    }
}
